﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Shapes;
using System.Data;
using SSPharma.Biz.NhanSu;
using SSPharma.Common;
using SSPharma.View.TimKiem;
using System.Collections.ObjectModel;
using SSPharma.Model;

namespace SSPharma.View.NhanSu
{
    /// <summary>
    /// Interaction logic for frmThemNhanVien.xaml
    /// </summary>
    public partial class frmThemNhanVien : Window
    {
        #region valible
        //dataset dung de luu  dữ liệu xuống database
        private DataSet dsData;
        private DataTable dtDeleteChucDanh;
        private DataTable dtDeleteChucVu;
        private DataTable dtDeleteNganHang;
        private DataTable dtDeleteTrangBi;
        private DataTable dtDeleteGiaDinh;
        // table permission
        private DataTable dtPermission;
        // enum dùng để lưu trữ trạng thái mode form
        private UtilityUIElement.FormMode isModeHeader;
        // khai báo đối tượng BizNhanVien
        private BizThemNhanVien _BizThemNhanVien;
        //datarow dùng để lấy dữ liệu và gán dữ liệu
        private DataRow drHeader;
        private DataRow drChucDanh;
        private DataRow drChucVu;
        private DataRow drNganHang;
        private DataRow drGiaDinh;
        private DataRow drTrangBi;
        // lấy controll đang được chọn hiện tại
        private string controlName;
        // org
        private string strORG;
        //depart
        private string strDepart;
        // biến counter
        private string Counter;
        // from name
        private string FormName;
        //// add a delegate
        public delegate void IdentityValues();
        //// add an event of the delegate type
        public event IdentityValues IdentityValue;
        
        #endregion

        #region contructor
        /// <summary>
        /// contructor tham số chuyền vào là mã tỷ giá
        /// </summary>
        /// <param name="Id"></param>
        public frmThemNhanVien(string Depart,string Id)
        {
            InitializeComponent();
            _BizThemNhanVien = new BizThemNhanVien();
            FormName = "frmThemNhanVien";
            strDepart = Depart;
            try
            {
                this.BeginMode();
                this.ReadonlyMode();
                GetDataNhanVienTheoMa(Id);
            }
            catch (Exception ex) { MessageBox.Show(ex.Message.ToString()); }
        }
        /// <summary>
        /// User:TAMNN 21/07/2014
        /// Contructor mac dinh
        /// </summary>
        public frmThemNhanVien()
        {
            InitializeComponent();
            _BizThemNhanVien = new BizThemNhanVien();
            FormName = "frmThemNhanVien";
            try
            {
                this.BeginMode();
               // this.NewMode();
            }
            catch (Exception ex) { MessageBox.Show(ex.Message.ToString()); }
        }
        #endregion

        #region Các Hàm Mode form
        /// <summary>
        /// User:TAMNN ; 20/08/2014
        /// Mục đích: chạy khi bắt đầu vào form
        /// </summary>
        private void BeginMode()
        {
            this.SetEnable_Button(true, false, false, false);
            this.EnableControl(false);
            this.GetCauTrucData();
            dtDeleteChucDanh = dsData.Tables["dt_ChucDanh"].Clone();
            dtDeleteChucVu = dsData.Tables["dt_ChucVu"].Clone();
            dtDeleteGiaDinh = dsData.Tables["dt_GiaDinh"].Clone();
            dtDeleteNganHang = dsData.Tables["dt_NganHang"].Clone();
            dtDeleteTrangBi = dsData.Tables["dt_TrangBi"].Clone();
        }
        /// <summary>
        /// User:TAMNN ; 20/08/2014
        /// Mục đích: chạy khi có mã chứng từ
        /// </summary>
        private void ReadonlyMode()
        {
            isModeHeader = UtilityUIElement.FormMode.ReadOnlyMode;
            this.SetEnable_Button(true,true,true, false);
            this.EnableControl(false);
        }

        /// <summary>
        /// User:TAMNN ; 20/08/2014
        /// Mục đích: chạy khi có mã chứng từ
        /// </summary>
        private void EditMode()
        {
            isModeHeader = UtilityUIElement.FormMode.EditMode;
            this.SetEnable_Button(true, false, false, true);
            this.EnableControl(true);
            this.txtHo.Focus();
        }
        /// <summary>
        /// User:TAMNN ; 20/08/2014
        /// Mục đích: thêm mới form
        /// </summary>
        private void NewMode()
        {
            this.ResetTemp();
            this.isModeHeader = UtilityUIElement.FormMode.NewMode;
            this.EnableControl(true);
            this.SetEnable_Button(true, false, false, true);
            this.GetCounter();
            this.dsData.Tables["dt_NhanVien"].Rows.Clear();
            this.dsData.Tables["dt_ChucDanh"].Rows.Clear();
            this.dsData.Tables["dt_ChucVu"].Rows.Clear();
            this.dsData.Tables["dt_NganHang"].Rows.Clear();
            this.dsData.Tables["dt_GiaDinh"].Rows.Clear();
            this.dsData.Tables["dt_TrangBi"].Rows.Clear();

            this.dsData.Tables["dt_NhanVien"].AcceptChanges();
            this.dsData.Tables["dt_ChucDanh"].AcceptChanges();
            this.dsData.Tables["dt_ChucVu"].AcceptChanges();
            this.dsData.Tables["dt_NganHang"].AcceptChanges();
            this.dsData.Tables["dt_TrangBi"].AcceptChanges();
            this.dsData.Tables["dt_GiaDinh"].AcceptChanges();
            this.drHeader = this.dsData.Tables["dt_NhanVien"].NewRow();
            this.dsData.Tables["dt_NhanVien"].Rows.Add(drHeader);
            this.SetDefaulControl();
            this.txtHo.Focus();
        }
        /// <summary>
        ///  User:TAMNN ; 20/08/2014
        ///  Mục đích: save xong dữ liệu thì gọi để đổ lại dữ liệu cho các controll
        /// </summary>
        private void SaveMode()
        {
            isModeHeader = UtilityUIElement.FormMode.EditMode;
            this.EnableControl(true);
            this.SetEnable_Button(true, true, true, false);
            this.txtMaNhanVien.Focus();
            DataTable dt = _BizThemNhanVien.ft_GetDataNhanVienTheoMa(strORG, strDepart, txtMaNhanVien.Text);// lấy dữ liệu theo mã
            dt.TableName = "dt_NhanVien";
            this.dsData.Tables.Remove(this.dsData.Tables["dt_NhanVien"]);
            this.dsData.Tables.Add(dt);
            dt = _BizThemNhanVien.ft_GetDataLSChucDanhTheoMa(strORG, strDepart, txtMaNhanVien.Text);// lấy dữ liệu theo mã
            dt.TableName = "dt_ChucDanh";
            this.dsData.Tables.Remove(this.dsData.Tables["dt_ChucDanh"]);
            this.dsData.Tables.Add(dt);
            dt = _BizThemNhanVien.ft_GetDataLSChucVuTheoMa(strORG, strDepart, txtMaNhanVien.Text);// lấy dữ liệu theo mã
            dt.TableName = "dt_ChucVu";
            this.dsData.Tables.Remove(this.dsData.Tables["dt_ChucVu"]);
            this.dsData.Tables.Add(dt);
            dt = _BizThemNhanVien.ft_GetDataLSNganHangTheoMa(strORG, strDepart, txtMaNhanVien.Text);// lấy dữ liệu theo mã
            dt.TableName = "dt_NganHang";
            this.dsData.Tables.Remove(this.dsData.Tables["dt_NganHang"]);
            this.dsData.Tables.Add(dt);
            dt = _BizThemNhanVien.ft_GetDataTrangBiCaNhanTheoMa(strORG, strDepart, txtMaNhanVien.Text);// lấy dữ liệu theo mã
            dt.TableName = "dt_TrangBi";
            this.dsData.Tables.Remove(this.dsData.Tables["dt_TrangBi"]);
            this.dsData.Tables.Add(dt);
            dt = _BizThemNhanVien.ft_GetDataThanNhanTheoMa(strORG, strDepart, txtMaNhanVien.Text);// lấy dữ liệu theo mã
            dt.TableName = "dt_GiaDinh";
            this.dsData.Tables.Remove(this.dsData.Tables["dt_GiaDinh"]);
            this.dsData.Tables.Add(dt);
            drHeader = dsData.Tables["dt_NhanVien"].Rows[0];
            UtilityUIElement.ElementToControl(drHeader,"Header", this.LayoutRoot.Children);
            gChucDanh.DataContext = dsData.Tables["dt_ChucDanh"].AsDataView();
            gChucVu.DataContext = dsData.Tables["dt_ChucVu"].AsDataView();
            gNganHang.DataContext = dsData.Tables["dt_NganHang"].AsDataView();
            gTrangBi.DataContext = dsData.Tables["dt_TrangBi"].AsDataView();
            gGiaDinh.DataContext = dsData.Tables["dt_GiaDinh"].AsDataView();
        }
        #endregion

        #region Event
        /// <summary>
        /// User:TAMNN; 20/08/2014
        /// Nút thoát form
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void btnThoat_Click(object sender, System.Windows.RoutedEventArgs e)
        {
            try
            {
                this.IdentityValue();
                this.Close();
            }
            catch (Exception ex) { MessageBox.Show(ex.Message.ToString()); }
        }
        /// <summary>
        /// User: TAMNN; 20/08/2014
        /// Thoát form
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void Window_Closed(object sender, System.EventArgs e)
        {
            try
            {
                this.IdentityValue();
            }
            catch (Exception ex) { MessageBox.Show(ex.Message.ToString()); }
        }
        /// <summary>
        /// sự kiện bàn phím cho form hiện tại
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void Window_KeyDown(object sender, System.Windows.Input.KeyEventArgs e)
        {
            try
            {
                if (e.Key == Key.F5)
                {
                    var focusedControl = FocusManager.GetFocusedElement(this);
                    string p_sStoreName = string.Empty, p_sParams = string.Empty, p_sValues = string.Empty;
                    Control control = (Control)focusedControl;
                    if (control == null)
                        return;
                    controlName = control.Name;
                    if (controlName.Equals("txtMaPhuongXaThuongTru") || controlName.Equals("txtMaPhuongXaTamTru"))
                    {
                        LibraryFunctionFind.StringTimKiemXaPhuong(ref p_sStoreName, ref p_sParams, ref p_sValues);
                        FunctionShowForm(p_sStoreName, p_sParams, p_sValues);
                    }
                    else if (controlName.Equals("txtMaQuanHuyenThuongTru") || controlName.Equals("txtMaQuanHuyenTamTru"))
                    {
                        LibraryFunctionFind.StringTimKiemQuanHuyen(ref p_sStoreName, ref p_sParams, ref p_sValues);
                        FunctionShowForm(p_sStoreName, p_sParams, p_sValues);
                    }
                    else if (controlName.Equals("txtMaTinhThuongTru") || controlName.Equals("txtMaTinhTamTru"))
                    {
                        LibraryFunctionFind.StringTimKiemTinhTP(ref p_sStoreName, ref p_sParams, ref p_sValues);
                        FunctionShowForm(p_sStoreName, p_sParams, p_sValues);
                    }
                }
            }
            catch (Exception ex) { }
        }
        private void btnPicTure_Click(object sender, System.Windows.RoutedEventArgs e)
        {
            try
            {
                Microsoft.Win32.OpenFileDialog fdlg = new Microsoft.Win32.OpenFileDialog();
                fdlg.Reset();
                fdlg.Title = "Select file";
                fdlg.InitialDirectory = @"c:\";
                fdlg.Filter = "JPEG Files (*.jpeg)|*.jpeg|PNG Files (*.png)|*.png|JPG Files (*.jpg)|*.jpg|GIF Files (*.gif)|*.gif";
                fdlg.FilterIndex = 1;
                fdlg.RestoreDirectory = true;
                bool bResult = (bool)fdlg.ShowDialog();
                if (bResult)
                {
                    imgPICTURE.Source = new BitmapImage(new Uri(fdlg.FileName));
                }
            }
            catch (Exception ex) { }
        }
        private void btnNew_Click(object sender, System.Windows.RoutedEventArgs e)
        {
            try
            {
                this.NewMode();
            }
            catch (Exception ex) { MessageBox.Show(ex.Message); }
        }

        private void btnSave_Click(object sender, System.Windows.RoutedEventArgs e)
        {
            try
            {
                bool p_bResult = false;
                string Message = string.Empty;
                this.CheckDataBeforeSave(ref Message, ref p_bResult);
                if (!string.IsNullOrEmpty(Message))
                {
                    MessageBox.Show(Message, "SSPharma");
                    return;
                }
                this.GetDataBeforeSave();//lấy dữ liệu trước khi lưu
                if (isModeHeader == UtilityUIElement.FormMode.NewMode)//Nếu là thêm mới
                {
                    if (p_bResult)// nếu như mã đó đã có
                    {
                        if (MessageBox.Show("Mã tỷ giá đã tồn tại.\n Bạn có muốn chương trình sẽ tự động tăng mã tiếp theo không ?", "SSPharma", MessageBoxButton.OKCancel) == MessageBoxResult.OK)
                        {
                            _BizThemNhanVien.fg_InsertNhanVien(dsData, Counter);
                            MessageBox.Show("Thêm thành công!");
                        }
                    }
                    else//ngược lại tạo mã tỷ giá rồi lưu dữ liệu bình thường
                    {
                        _BizThemNhanVien.fg_InsertNhanVien(dsData, Counter);
                        MessageBox.Show("Thêm thành công!");
                    }
                }
                else// ngược lại là cập nhật dữ liệu
                {
                    _BizThemNhanVien.fg_UpdateNhanVien(dsData);
                    MessageBox.Show("Cập nhật thành công!");
                }
                this.SaveMode();
            }
            catch (Exception ex) { MessageBox.Show(ex.Message.ToString()); }
        }

        private void btnDelete_Click(object sender, System.Windows.RoutedEventArgs e)
        {
            // TODO: Add event handler implementation here.
        }

        private void btnEdit_Click(object sender, System.Windows.RoutedEventArgs e)
        {
            this.EditMode();
        }

        #region sự kiện của lưới Chuc Danh
        private void gChucDanh_PreviewKeyDown(object sender, System.Windows.Input.KeyEventArgs e)
        {
            #region Xóa dòng trên lưới
            if (((Keyboard.Modifiers & ModifierKeys.Control) == ModifierKeys.Control) && e.Key == Key.Delete)
            {
                var dataGrid = (DataGrid)sender;
                var result = MessageBox.Show("Bạn muốn thực hiện việc xóa dòng này?", "SSPharma", MessageBoxButton.YesNo, MessageBoxImage.Question, MessageBoxResult.Yes);
                e.Handled = (result == MessageBoxResult.No);// Handled = true là dừng lại. false là tiếp tục
                if (!e.Handled)
                {
                    int selected = dataGrid.SelectedIndex;
                    int num = this.dsData.Tables["dt_ChucDanh"].Rows.Count;
                    if (selected != num)
                    {
                        this.drChucDanh = this.dsData.Tables["dt_ChucDanh"].Rows[selected];
                        if (drChucDanh.RowState == DataRowState.Modified)
                        {
                            dsData.Tables["dt_ChucDanh"].Rows[selected].RejectChanges();
                            this.dtDeleteChucDanh.ImportRow(drChucDanh);
                        }
                        else if (drChucDanh.RowState == DataRowState.Added)
                        {
                            dsData.Tables["dt_ChucDanh"].Rows[selected].AcceptChanges();
                        }
                        else
                        {
                            dsData.Tables["dt_ChucDanh"].Rows[selected].AcceptChanges();
                            this.dtDeleteChucDanh.ImportRow(drChucDanh);
                        }

                        this.dsData.Tables["dt_ChucDanh"].Rows.RemoveAt(selected);
                    }
                }
            }
            #endregion

            #region Tìm kiếm
            else if (e.Key == Key.F5)
            {
                string p_sStoreName = string.Empty, p_sParams = string.Empty, p_sValues = string.Empty;
                controlName = gChucDanh.CurrentCell.Column.SortMemberPath;
                if (controlName.Equals("MaChucDanh") || controlName.Equals("TenChucDanh"))
                {
                    LibraryFunctionFind.StringTimKiemChucDanh(ref p_sStoreName, ref p_sParams, ref p_sValues);
                    FunctionShowForm(p_sStoreName, p_sParams, p_sValues);
                    e.Handled = true;
                }
            }
            #endregion

            #region Thêm dòng mới
            if ((((Keyboard.Modifiers & ModifierKeys.Control) == ModifierKeys.Control) && ((Keyboard.Modifiers & ModifierKeys.Alt) == ModifierKeys.Alt)) && (e.Key == Key.I))
            {
                var dataGrid = (DataGrid)sender;
                int selected = dataGrid.SelectedIndex;
                DataTable dt = dsData.Tables["dt_ChucDanh"];
                DataRow dr = dt.NewRow();
                dt.Rows.InsertAt(dr, selected);
                gChucDanh.SelectedIndex = selected;
            }
            #endregion
            
            #region Forcus dòng tiếp theo
            if (e.Key == Key.Enter || e.Key == Key.Return)
            {
                
                // get the selected row
                var selectedRow = gChucDanh.ItemContainerGenerator.ContainerFromItem(gChucDanh.SelectedItem) as DataGridRow;
                // selectedRow can be null due to virtualization
                if (selectedRow != null)
                {
                    // there should always be a selected cell
                    if (gChucDanh.SelectedCells.Count != 0)
                    {
                        // get the cell info
                        DataGridCellInfo currentCell = gChucDanh.CurrentCell;

                        // get the display index of the cell's column + 1 (for next column)
                        int columnDisplayIndex = currentCell.Column.DisplayIndex + 1;

                        // if display index is valid
                        if (columnDisplayIndex < gChucDanh.Columns.Count)
                        {
                            // get the DataGridColumn instance from the display index
                            DataGridColumn nextColumn = gChucDanh.ColumnFromDisplayIndex(columnDisplayIndex);

                            // now telling the grid, that we handled the key down event
                            e.Handled = true;

                            // setting the current cell (selected, focused)
                            gChucDanh.CurrentCell = new DataGridCellInfo(gChucDanh.SelectedItem, nextColumn);
                            // tell the grid to initialize edit mode for the current cell
                           gChucDanh.BeginEdit();
                        }
                        else
                        {
                            // get the DataGridColumn instance from the display index
                            DataGridColumn nextColumn = gChucDanh.ColumnFromDisplayIndex(0);
                            // setting the current cell (selected, focused)
                            gChucDanh.CurrentCell = new DataGridCellInfo(gChucDanh.SelectedItem, nextColumn);
                            if (isModeHeader ==  UtilityUIElement.FormMode.NewMode || isModeHeader == UtilityUIElement.FormMode.EditMode)
                            {
                                int selected = gChucDanh.SelectedIndex;
                                DataRow dr = dsData.Tables["dt_ChucDanh"].NewRow();
                                dr["IsHienHanh"] = false;
                                dsData.Tables["dt_ChucDanh"].Rows.Add(dr);
                                gChucDanh.SelectedIndex = selected;
                            }
                            gChucDanh.BeginEdit();
                        }
                    }
                }
            }
            #endregion
        }
        private void gChucDanh_LoadingRow(object sender, DataGridRowEventArgs e)
        {
            e.Row.Header = (e.Row.GetIndex() + 1).ToString();
        }
        private void gChucDanh_CellEditEnding(object sender, DataGridCellEditEndingEventArgs e)
        {
            try
            {
                DataRowView drv = gChucDanh.SelectedValue as DataRowView;
                if (e.Column.SortMemberPath == "MaChucDanh")
                {
                    drv["TenChucDanh"] = _BizThemNhanVien.ft_GetChucDanhTheoMa(drv["MaChucDanh"].ToString());
                    drv.EndEdit();
                }
                else if (e.Column.DisplayIndex == 2)
                {
                    drv["TuNgay"] = LibraryFormatConverter.ConvertStringDDMMYYYYToStringYYYYMMDD(drv["TuNgayHienThi"].ToString());
                }
                else if (e.Column.DisplayIndex == 3)
                {
                    drv["DenNgay"] = LibraryFormatConverter.ConvertStringDDMMYYYYToStringYYYYMMDD(drv["DenNgayHienThi"].ToString());
                }
               
            }
            catch (Exception ex) { }
        }
        private void gChucDanh_InitializingNewItem(object sender, System.Windows.Controls.InitializingNewItemEventArgs e)
        {
            DataRowView drw = e.NewItem as DataRowView;
            drw["IsHienHanh"] = false;

        }
        #endregion

        #region sự kiện của lưới Chức vụ
        private void gChucVu_PreviewKeyDown(object sender, System.Windows.Input.KeyEventArgs e)
        {
            try
            {
                #region Xóa dòng trên lưới
                if (((Keyboard.Modifiers & ModifierKeys.Control) == ModifierKeys.Control) && e.Key == Key.Delete)
                {
                    var dataGrid = (DataGrid)sender;
                    var result = MessageBox.Show("Bạn muốn thực hiện việc xóa dòng này?", "SSPharma", MessageBoxButton.YesNo, MessageBoxImage.Question, MessageBoxResult.Yes);
                    e.Handled = (result == MessageBoxResult.No);// Handled = true là dừng lại. false là tiếp tục
                    if (!e.Handled)
                    {
                        int selected = dataGrid.SelectedIndex;
                        int num = this.dsData.Tables["dt_ChucVu"].Rows.Count;
                        if (selected != num)
                        {
                            this.drChucVu = this.dsData.Tables["dt_ChucVu"].Rows[selected];
                            if (drChucVu.RowState == DataRowState.Modified)
                            {
                                dsData.Tables["dt_ChucVu"].Rows[selected].RejectChanges();
                                this.dtDeleteChucDanh.ImportRow(drChucVu);
                            }
                            else if (drChucVu.RowState == DataRowState.Added)
                            {
                                dsData.Tables["dt_ChucVu"].Rows[selected].AcceptChanges();
                            }
                            else
                            {
                                dsData.Tables["dt_ChucVu"].Rows[selected].AcceptChanges();
                                this.dtDeleteChucDanh.ImportRow(drChucVu);
                            }

                            this.dsData.Tables["dt_ChucVu"].Rows.RemoveAt(selected);
                        }
                    }
                }
                #endregion

                #region Tìm kiếm
                else if (e.Key == Key.F5)
                {
                    string p_sStoreName = string.Empty, p_sParams = string.Empty, p_sValues = string.Empty;
                    controlName = gChucVu.CurrentCell.Column.SortMemberPath;
                    if (controlName.Equals("MaLoaiTien") || controlName.Equals("TenLoaiTien"))
                    {
                        LibraryFunctionFind.StringTimKiemNganHang(ref p_sStoreName, ref p_sParams, ref p_sValues);
                        FunctionShowForm(p_sStoreName, p_sParams, p_sValues);
                    }
                }
                #endregion

                #region Forcus dòng tiếp theo
                if (e.Key == Key.Enter || e.Key == Key.Return)
                {
                    // get the selected row
                    var selectedRow = gChucVu.ItemContainerGenerator.ContainerFromItem(gChucVu.SelectedItem) as DataGridRow;

                    // selectedRow can be null due to virtualization
                    if (selectedRow != null)
                    {
                        // there should always be a selected cell
                        if (gChucVu.SelectedCells.Count != 0)
                        {
                            // get the cell info
                            DataGridCellInfo currentCell = gChucVu.CurrentCell;

                            // get the display index of the cell's column + 1 (for next column)
                            int columnDisplayIndex = currentCell.Column.DisplayIndex + 1;

                            // if display index is valid
                            if (columnDisplayIndex < gChucVu.Columns.Count)
                            {
                                // get the DataGridColumn instance from the display index
                                DataGridColumn nextColumn = gChucVu.ColumnFromDisplayIndex(columnDisplayIndex);

                                // now telling the grid, that we handled the key down event
                                e.Handled = true;

                                // setting the current cell (selected, focused)
                                gChucVu.CurrentCell = new DataGridCellInfo(gChucVu.SelectedItem, nextColumn);
                                // tell the grid to initialize edit mode for the current cell
                                gChucVu.BeginEdit();
                            }
                            else
                            {
                                // get the DataGridColumn instance from the display index
                                DataGridColumn nextColumn = gChucVu.ColumnFromDisplayIndex(0);
                                // setting the current cell (selected, focused)
                                gChucVu.CurrentCell = new DataGridCellInfo(gChucVu.SelectedItem, nextColumn);
                                gChucVu.BeginEdit();
                            }
                        }
                    }
                }
                #endregion
            }
            catch (Exception ex) { }
        }
        private void gChucVu_KeyDown(object sender, System.Windows.Input.KeyEventArgs e)
        {
            if ((((Keyboard.Modifiers & ModifierKeys.Control) == ModifierKeys.Control) && ((Keyboard.Modifiers & ModifierKeys.Alt) == ModifierKeys.Alt)) && (e.Key == Key.I))
            {
                var dataGrid = (DataGrid)sender;
                int selected = dataGrid.SelectedIndex;
                DataTable dt = dsData.Tables["dt_ChucVu"];
                DataRow dr = dt.NewRow();
                dt.Rows.InsertAt(dr, selected);
                gChucVu.SelectedIndex = selected;
            }
        }
        private void gChucVu_LoadingRow(object sender, DataGridRowEventArgs e)
        {
            e.Row.Header = (e.Row.GetIndex() + 1).ToString();
        }
        private void gChucVu_CellEditEnding(object sender, DataGridCellEditEndingEventArgs e)
        {
            try
            {
                DataRowView drv = gChucDanh.SelectedValue as DataRowView;
                if (e.Column.SortMemberPath == "MaChucVu")
                {
                    drv["TenChucVu"] = _BizThemNhanVien.ft_GetChucVuTheoMa(drv["MaChucVu"].ToString());
                }
                else if (e.Column.DisplayIndex == 2)
                {
                    drv["TuNgay"] = LibraryFormatConverter.ConvertStringDDMMYYYYToStringYYYYMMDD(drv["TuNgayHienThi"].ToString());
                }
                else if (e.Column.DisplayIndex == 3)
                {
                    drv["DenNgay"] = LibraryFormatConverter.ConvertStringDDMMYYYYToStringYYYYMMDD(drv["DenNgayHienThi"].ToString());
                }
            }
            catch (Exception ex) { }
        }
        private void gChucVu_InitializingNewItem(object sender, System.Windows.Controls.InitializingNewItemEventArgs e)
        {
            DataRowView drw = e.NewItem as DataRowView;
            drw["IsHienHanh"] = false;

        }
        #endregion

        #region sự kiện của lưới ngân hàng
        private void gNganHang_PreviewKeyDown(object sender, System.Windows.Input.KeyEventArgs e)
        {
            #region Xóa dòng trên lưới
            if (((Keyboard.Modifiers & ModifierKeys.Control) == ModifierKeys.Control) && e.Key == Key.Delete)
            {
                var dataGrid = (DataGrid)sender;
                var result = MessageBox.Show("Bạn muốn thực hiện việc xóa dòng này?", "SSPharma", MessageBoxButton.YesNo, MessageBoxImage.Question, MessageBoxResult.Yes);
                e.Handled = (result == MessageBoxResult.No);// Handled = true là dừng lại. false là tiếp tục
                if (!e.Handled)
                {
                    int selected = dataGrid.SelectedIndex;
                    int num = this.dsData.Tables["dt_NganHang"].Rows.Count;
                    if (selected != num)
                    {
                        this.drNganHang = this.dsData.Tables["dt_NganHang"].Rows[selected];
                        if (drNganHang.RowState == DataRowState.Modified)
                        {
                            dsData.Tables["dt_NganHang"].Rows[selected].RejectChanges();
                            this.dtDeleteNganHang.ImportRow(drNganHang);
                        }
                        else if (drNganHang.RowState == DataRowState.Added)
                        {
                            dsData.Tables["dt_NganHang"].Rows[selected].AcceptChanges();
                        }
                        else
                        {
                            dsData.Tables["dt_NganHang"].Rows[selected].AcceptChanges();
                            this.dtDeleteNganHang.ImportRow(drNganHang);
                        }

                        this.dsData.Tables["dt_NganHang"].Rows.RemoveAt(selected);
                    }
                }
            }
            #endregion

            #region Tìm kiếm
            else if (e.Key == Key.F5)
            {
                string p_sStoreName = string.Empty, p_sParams = string.Empty, p_sValues = string.Empty;
                controlName = gNganHang.CurrentCell.Column.SortMemberPath;
                if (controlName.Equals("MaLoaiTien") || controlName.Equals("TenLoaiTien"))
                {
                    LibraryFunctionFind.StringTimKiemNganHang(ref p_sStoreName, ref p_sParams, ref p_sValues);
                    FunctionShowForm(p_sStoreName, p_sParams, p_sValues);
                }
            }
            #endregion

            #region Forcus dòng tiếp theo
            if (e.Key == Key.Enter || e.Key == Key.Return)
            {
                // get the selected row
                var selectedRow = gNganHang.ItemContainerGenerator.ContainerFromItem(gNganHang.SelectedItem) as DataGridRow;

                // selectedRow can be null due to virtualization
                if (selectedRow != null)
                {
                    // there should always be a selected cell
                    if (gNganHang.SelectedCells.Count != 0)
                    {
                        // get the cell info
                        DataGridCellInfo currentCell = gNganHang.CurrentCell;

                        // get the display index of the cell's column + 1 (for next column)
                        int columnDisplayIndex = currentCell.Column.DisplayIndex + 1;

                        // if display index is valid
                        if (columnDisplayIndex < gNganHang.Columns.Count)
                        {
                            // get the DataGridColumn instance from the display index
                            DataGridColumn nextColumn = gNganHang.ColumnFromDisplayIndex(columnDisplayIndex);

                            // now telling the grid, that we handled the key down event
                            e.Handled = true;

                            // setting the current cell (selected, focused)
                            gNganHang.CurrentCell = new DataGridCellInfo(gNganHang.SelectedItem, nextColumn);
                            // tell the grid to initialize edit mode for the current cell
                            gNganHang.BeginEdit();
                        }
                        else
                        {
                            // get the DataGridColumn instance from the display index
                            DataGridColumn nextColumn = gNganHang.ColumnFromDisplayIndex(0);
                            // setting the current cell (selected, focused)
                            gNganHang.CurrentCell = new DataGridCellInfo(gNganHang.SelectedItem, nextColumn);
                            gNganHang.BeginEdit();
                        }
                    }
                }
            }
            #endregion
        }
        private void gNganHang_KeyDown(object sender, System.Windows.Input.KeyEventArgs e)
        {
            if ((((Keyboard.Modifiers & ModifierKeys.Control) == ModifierKeys.Control) && ((Keyboard.Modifiers & ModifierKeys.Alt) == ModifierKeys.Alt)) && (e.Key == Key.I))
            {
                var dataGrid = (DataGrid)sender;
                int selected = dataGrid.SelectedIndex;
                DataTable dt = dsData.Tables["dt_NganHang"];
                DataRow dr = dt.NewRow();
                dt.Rows.InsertAt(dr, selected);
                gNganHang.SelectedIndex = selected;
            }
        }
        private void gNganHang_LoadingRow(object sender, DataGridRowEventArgs e)
        {
            e.Row.Header = (e.Row.GetIndex() + 1).ToString();
        }
        private void gNganHang_CellEditEnding(object sender, DataGridCellEditEndingEventArgs e)
        {
            try
            {
                DataRowView drv = gNganHang.SelectedValue as DataRowView;
                if (e.Column.SortMemberPath == "MaNganHang")
                {
                    drv["TenNganHang"] = _BizThemNhanVien.ft_GetNganHangTheoMa(drv["MaNganHang"].ToString());
                }
            }
            catch (Exception ex) { }
        }
        private void gNganHang_InitializingNewItem(object sender, System.Windows.Controls.InitializingNewItemEventArgs e)
        {
            DataRowView drw = e.NewItem as DataRowView;
            drw["SuDung"] = false;
            drw["MacDinh"] = false;

        }
        #endregion  
        
        #region sự kiện của lưới trang bị
        private void gTrangBi_PreviewKeyDown(object sender, System.Windows.Input.KeyEventArgs e)
        {
            #region Xóa dòng trên lưới
            if (((Keyboard.Modifiers & ModifierKeys.Control) == ModifierKeys.Control) && e.Key == Key.Delete)
            {
                var dataGrid = (DataGrid)sender;
                var result = MessageBox.Show("Bạn muốn thực hiện việc xóa dòng này?", "SSPharma", MessageBoxButton.YesNo, MessageBoxImage.Question, MessageBoxResult.Yes);
                e.Handled = (result == MessageBoxResult.No);// Handled = true là dừng lại. false là tiếp tục
                if (!e.Handled)
                {
                    int selected = dataGrid.SelectedIndex;
                    int num = this.dsData.Tables["dt_TrangBi"].Rows.Count;
                    if (selected != num)
                    {
                        this.drTrangBi = this.dsData.Tables["dt_TrangBi"].Rows[selected];
                        if (drTrangBi.RowState == DataRowState.Modified)
                        {
                            dsData.Tables["dt_TrangBi"].Rows[selected].RejectChanges();
                            this.dtDeleteTrangBi.ImportRow(drTrangBi);
                        }
                        else if (drTrangBi.RowState == DataRowState.Added)
                        {
                            dsData.Tables["dt_TrangBi"].Rows[selected].AcceptChanges();
                        }
                        else
                        {
                            dsData.Tables["dt_TrangBi"].Rows[selected].AcceptChanges();
                            this.dtDeleteTrangBi.ImportRow(drTrangBi);
                        }

                        this.dsData.Tables["dt_TrangBi"].Rows.RemoveAt(selected);
                    }
                }
            }
            #endregion

            #region Tìm kiếm
            else if (e.Key == Key.F5)
            {
                string p_sStoreName = string.Empty, p_sParams = string.Empty, p_sValues = string.Empty;
                controlName = gTrangBi.CurrentCell.Column.SortMemberPath;
                //if (controlName.Equals("MaLoaiTien") || controlName.Equals("TenLoaiTien"))
                //{
                //    LibraryFunctionFind.StringTimKiemTrangBi(ref p_sStoreName, ref p_sParams, ref p_sValues);
                //    FunctionShowForm(p_sStoreName, p_sParams, p_sValues);
                //}
            }
            #endregion

            #region Forcus dòng tiếp theo
            if (e.Key == Key.Enter || e.Key == Key.Return)
            {
                // get the selected row
                var selectedRow = gTrangBi.ItemContainerGenerator.ContainerFromItem(gTrangBi.SelectedItem) as DataGridRow;

                // selectedRow can be null due to virtualization
                if (selectedRow != null)
                {
                    // there should always be a selected cell
                    if (gTrangBi.SelectedCells.Count != 0)
                    {
                        // get the cell info
                        DataGridCellInfo currentCell = gTrangBi.CurrentCell;

                        // get the display index of the cell's column + 1 (for next column)
                        int columnDisplayIndex = currentCell.Column.DisplayIndex + 1;

                        // if display index is valid
                        if (columnDisplayIndex < gTrangBi.Columns.Count)
                        {
                            // get the DataGridColumn instance from the display index
                            DataGridColumn nextColumn = gTrangBi.ColumnFromDisplayIndex(columnDisplayIndex);

                            // now telling the grid, that we handled the key down event
                            e.Handled = true;

                            // setting the current cell (selected, focused)
                            gTrangBi.CurrentCell = new DataGridCellInfo(gTrangBi.SelectedItem, nextColumn);
                            // tell the grid to initialize edit mode for the current cell
                            gTrangBi.BeginEdit();
                        }
                        else
                        {
                            // get the DataGridColumn instance from the display index
                            DataGridColumn nextColumn = gTrangBi.ColumnFromDisplayIndex(0);
                            // setting the current cell (selected, focused)
                            gTrangBi.CurrentCell = new DataGridCellInfo(gTrangBi.SelectedItem, nextColumn);
                            gTrangBi.BeginEdit();
                        }
                    }
                }
            }
            #endregion
        }
        private void gTrangBi_KeyDown(object sender, System.Windows.Input.KeyEventArgs e)
        {
            if ((((Keyboard.Modifiers & ModifierKeys.Control) == ModifierKeys.Control) && ((Keyboard.Modifiers & ModifierKeys.Alt) == ModifierKeys.Alt)) && (e.Key == Key.I))
            {
                var dataGrid = (DataGrid)sender;
                int selected = dataGrid.SelectedIndex;
                DataTable dt = dsData.Tables["dt_TrangBi"];
                DataRow dr = dt.NewRow();
                dt.Rows.InsertAt(dr, selected);
                gTrangBi.SelectedIndex = selected;
            }
        }
        private void gTrangBi_LoadingRow(object sender, DataGridRowEventArgs e)
        {
            e.Row.Header = (e.Row.GetIndex() + 1).ToString();
        }
        private void gTrangBi_CellEditEnding(object sender, DataGridCellEditEndingEventArgs e)
        {
            try
            {
                //var ft = sender;
                //if (controlName == "MaLoaiTien")
                //{
                //    DataRowView drv = gTyGia.SelectedValue as DataRowView;
                //    drv["TenLoaiTien"] = _BizThemNhanVien.ft_GetTenLoaiTienTheoMa(drv["MaLoaiTien"].ToString());
                //}
            }
            catch (Exception ex) { }
        }
        private void gTrangBi_InitializingNewItem(object sender, System.Windows.Controls.InitializingNewItemEventArgs e)
        {
            DataRowView drw = e.NewItem as DataRowView;
            drw["SuDung"] = false;

        }
        #endregion  

        #region sự kiện của lưới giai đình
        private void gGiaDinh_PreviewKeyDown(object sender, System.Windows.Input.KeyEventArgs e)
        {
            #region Xóa dòng trên lưới
            if (((Keyboard.Modifiers & ModifierKeys.Control) == ModifierKeys.Control) && e.Key == Key.Delete)
            {
                var dataGrid = (DataGrid)sender;
                var result = MessageBox.Show("Bạn muốn thực hiện việc xóa dòng này?", "SSPharma", MessageBoxButton.YesNo, MessageBoxImage.Question, MessageBoxResult.Yes);
                e.Handled = (result == MessageBoxResult.No);// Handled = true là dừng lại. false là tiếp tục
                if (!e.Handled)
                {
                    int selected = dataGrid.SelectedIndex;
                    int num = this.dsData.Tables["dt_GiaDinh"].Rows.Count;
                    if (selected != num)
                    {
                        this.drGiaDinh = this.dsData.Tables["dt_GiaDinh"].Rows[selected];
                        if (drGiaDinh.RowState == DataRowState.Modified)
                        {
                            dsData.Tables["dt_GiaDinh"].Rows[selected].RejectChanges();
                            this.dtDeleteGiaDinh.ImportRow(drGiaDinh);
                        }
                        else if (drGiaDinh.RowState == DataRowState.Added)
                        {
                            dsData.Tables["dt_GiaDinh"].Rows[selected].AcceptChanges();
                        }
                        else
                        {
                            dsData.Tables["dt_GiaDinh"].Rows[selected].AcceptChanges();
                            this.dtDeleteGiaDinh.ImportRow(drGiaDinh);
                        }

                        this.dsData.Tables["dt_GiaDinh"].Rows.RemoveAt(selected);
                    }
                }
            }
            #endregion

            #region Tìm kiếm
            else if (e.Key == Key.F5)
            {
                string p_sStoreName = string.Empty, p_sParams = string.Empty, p_sValues = string.Empty;
                controlName = gGiaDinh.CurrentCell.Column.SortMemberPath;
                //if (controlName.Equals("MaLoaiTien") || controlName.Equals("TenLoaiTien"))
                //{
                //    LibraryFunctionFind.StringTimKiemGiaDinh(ref p_sStoreName, ref p_sParams, ref p_sValues);
                //    FunctionShowForm(p_sStoreName, p_sParams, p_sValues);
                //}
            }
            #endregion

            #region Forcus dòng tiếp theo
            if (e.Key == Key.Enter || e.Key == Key.Return)
            {
                // get the selected row
                var selectedRow = gGiaDinh.ItemContainerGenerator.ContainerFromItem(gGiaDinh.SelectedItem) as DataGridRow;

                // selectedRow can be null due to virtualization
                if (selectedRow != null)
                {
                    // there should always be a selected cell
                    if (gGiaDinh.SelectedCells.Count != 0)
                    {
                        // get the cell info
                        DataGridCellInfo currentCell = gGiaDinh.CurrentCell;

                        // get the display index of the cell's column + 1 (for next column)
                        int columnDisplayIndex = currentCell.Column.DisplayIndex + 1;

                        // if display index is valid
                        if (columnDisplayIndex < gGiaDinh.Columns.Count)
                        {
                            // get the DataGridColumn instance from the display index
                            DataGridColumn nextColumn = gGiaDinh.ColumnFromDisplayIndex(columnDisplayIndex);

                            // now telling the grid, that we handled the key down event
                            e.Handled = true;

                            // setting the current cell (selected, focused)
                            gGiaDinh.CurrentCell = new DataGridCellInfo(gGiaDinh.SelectedItem, nextColumn);
                            // tell the grid to initialize edit mode for the current cell
                            gGiaDinh.BeginEdit();
                        }
                        else
                        {
                            // get the DataGridColumn instance from the display index
                            DataGridColumn nextColumn = gGiaDinh.ColumnFromDisplayIndex(0);
                            // setting the current cell (selected, focused)
                            gGiaDinh.CurrentCell = new DataGridCellInfo(gGiaDinh.SelectedItem, nextColumn);
                            gGiaDinh.BeginEdit();
                        }
                    }
                }
            }
            #endregion
        }
        private void gGiaDinh_KeyDown(object sender, System.Windows.Input.KeyEventArgs e)
        {
            if ((((Keyboard.Modifiers & ModifierKeys.Control) == ModifierKeys.Control) && ((Keyboard.Modifiers & ModifierKeys.Alt) == ModifierKeys.Alt)) && (e.Key == Key.I))
            {
                var dataGrid = (DataGrid)sender;
                int selected = dataGrid.SelectedIndex;
                DataTable dt = dsData.Tables["dt_TrangBi"];
                DataRow dr = dt.NewRow();
                dt.Rows.InsertAt(dr, selected);
                gTrangBi.SelectedIndex = selected;
            }
        }
        private void gGiaDinh_LoadingRow(object sender, DataGridRowEventArgs e)
        {
            e.Row.Header = (e.Row.GetIndex() + 1).ToString();
        }
        private void gGiaDinh_CellEditEnding(object sender, DataGridCellEditEndingEventArgs e)
        {
            try
            {
                if (e.Column.DisplayIndex == 2)
                {
                    DataRowView drv = gChucDanh.SelectedValue as DataRowView;
                    drv["TuNgay"] = LibraryFormatConverter.ConvertStringDDMMYYYYToStringYYYYMMDD(drv["NgaySinhHienThi"].ToString());
                }
            }
            catch (Exception ex) { }
        }
        private void gGiaDinh_InitializingNewItem(object sender, System.Windows.Controls.InitializingNewItemEventArgs e)
        {
            DataRowView drw = e.NewItem as DataRowView;
        }
        #endregion  

        #endregion

        #region Utility function
        /// <summary>
        /// User: TAMNN; 20/08/2014
        /// lấy mã tỷ giá
        /// </summary>
        public void GetCounter()
        {
            string counter = this._BizThemNhanVien.fs_LayCongToTuDong(Counter);
            if (!string.IsNullOrEmpty(counter))
            {
                txtMaNhanVien.Text = counter;
                txtIDNhanVien.Text =Global.ORG+counter;
            }
            else
                throw new System.Configuration.Provider.ProviderException("Không lấy được Mã nhân viên");
        }
        /// <summary>
        /// User: TAMNN; 20/08/2014
        /// lấy cấu trúc table trong sql để thực hiện thêm, xóa, sửa dữ liệu
        /// </summary>
        private void GetCauTrucData()
        {
            dsData = _BizThemNhanVien.fs_LayCauTrucTable(FormName,strORG,strDepart);
            if (dsData.Tables["dt_Default"].Rows.Count > 0 && dsData.Tables["dt_Default"].Rows[0]["TenCot"].ToString() == "Counter")
                Counter = dsData.Tables["dt_Default"].Rows[0]["GiaTri"].ToString();
            cboGioiTinh.ItemsSource = new ObservableCollection<cboCommon>(_BizThemNhanVien.fl_DSDanhMuc_GioiTinh());
            cboGioiTinh.SelectedIndex = 0;
            cboNoiSinh.ItemsSource = new ObservableCollection<cboCommon>(_BizThemNhanVien.fl_DSDanhMuc_Tinh());
            cboNoiSinh.SelectedIndex = 0;
            cboMaDanToc.ItemsSource = new ObservableCollection<cboCommon>(_BizThemNhanVien.fl_DSDanhMuc_DanToc());
            cboMaDanToc.SelectedIndex = 0;
            cboMaTonGiao.ItemsSource = new ObservableCollection<cboCommon>(_BizThemNhanVien.fl_DSDanhMuc_TonGiao());
            cboMaTonGiao.SelectedIndex = 0;
            cboMaQuocTich.ItemsSource = new ObservableCollection<cboCheckBox>(_BizThemNhanVien.fl_DSDanhMuc_QuocTich());
        }
        /// <summary>
        /// User: TAMNN; 20/08/2014
        /// lấy dữ liệu trước khi lưu
        /// </summary>
        private void GetDataBeforeSave()
        {
            UtilityUIElement.ControlToElement(ref this.drHeader,"Header", this.LayoutRoot.Children);
            drHeader["ModifiedDate"] = LibraryFormatConverter.ConvertStringDDMMYYYYHHMMSSToYYYYMMDDHHMMSS(LibraryFormatConverter.SetStringDateTimeDefault);
            drHeader["ModifiedBy"] = Global.UserName;
            drHeader["ID_ORG"] = Global.ORG;
            if (this.isModeHeader == UtilityUIElement.FormMode.NewMode)
            {
                drHeader["CreatedDate"] = LibraryFormatConverter.ConvertStringDDMMYYYYHHMMSSToYYYYMMDDHHMMSS(LibraryFormatConverter.SetStringDateTimeDefault);
                drHeader["CreatedBy"] = Global.UserName;
                this.dsData.Tables["dt_NhanVien"].Rows[0].AcceptChanges();// chuyển trạng thái về Unchange
                this.dsData.Tables["dt_NhanVien"].Rows[0].SetAdded();// set lai trang thai la Added
            }
            // Kiểm tra đã xóa những dòng nào trong table chức danh
            int num = this.dsData.Tables["dt_ChucDanh"].Rows.Count - 1;
            for (int i = this.dtDeleteChucDanh.Rows.Count - 1; i >= 0; i--)
            {
                this.dsData.Tables["dt_ChucDanh"].ImportRow(this.dtDeleteChucDanh.Rows[i]);
                num++;
                this.dsData.Tables["dt_ChucDanh"].Rows[num].AcceptChanges();
                this.dsData.Tables["dt_ChucDanh"].Rows[num].Delete();
            }
            // Kiểm tra đã xóa những dòng nào trong table chức vụ
            num = this.dsData.Tables["dt_ChucVu"].Rows.Count - 1;
            for (int i = this.dtDeleteChucVu.Rows.Count - 1; i >= 0; i--)
            {
                this.dsData.Tables["dt_ChucVu"].ImportRow(this.dtDeleteChucVu.Rows[i]);
                num++;
                this.dsData.Tables["dt_ChucVu"].Rows[num].AcceptChanges();
                this.dsData.Tables["dt_ChucVu"].Rows[num].Delete();
            }
            // Kiểm tra đã xóa những dòng nào trong table ngân hàng
            num = this.dsData.Tables["dt_NganHang"].Rows.Count - 1;
            for (int i = this.dtDeleteNganHang.Rows.Count - 1; i >= 0; i--)
            {
                this.dsData.Tables["dt_NganHang"].ImportRow(this.dtDeleteNganHang.Rows[i]);
                num++;
                this.dsData.Tables["dt_NganHang"].Rows[num].AcceptChanges();
                this.dsData.Tables["dt_NganHang"].Rows[num].Delete();
            }
            // Kiểm tra đã xóa những dòng nào trong table thiết bị
            num = this.dsData.Tables["dt_TrangBi"].Rows.Count - 1;
            for (int i = this.dtDeleteTrangBi.Rows.Count - 1; i >= 0; i--)
            {
                this.dsData.Tables["dt_TrangBi"].ImportRow(this.dtDeleteTrangBi.Rows[i]);
                num++;
                this.dsData.Tables["dt_TrangBi"].Rows[num].AcceptChanges();
                this.dsData.Tables["dt_TrangBi"].Rows[num].Delete();
            }
            // Kiểm tra đã xóa những dòng nào trong table thân nhân
            num = this.dsData.Tables["dt_GiaDinh"].Rows.Count - 1;
            for (int i = this.dtDeleteGiaDinh.Rows.Count - 1; i >= 0; i--)
            {
                this.dsData.Tables["dt_GiaDinh"].ImportRow(this.dtDeleteGiaDinh.Rows[i]);
                num++;
                this.dsData.Tables["dt_GiaDinh"].Rows[num].AcceptChanges();
                this.dsData.Tables["dt_GiaDinh"].Rows[num].Delete();
            }
        }
        /// <summary>
        /// User: TAMNN; 20/08/2014
        /// Lấy tỷ giá theo mã tỷ giá
        /// </summary>
        /// <param name="strMa"></param>
        private void GetDataNhanVienTheoMa(string strMa)
        {
            DataTable dt = _BizThemNhanVien.ft_GetDataNhanVienTheoMa(strORG, strDepart, txtMaNhanVien.Text);// lấy dữ liệu theo mã
            dt.TableName = "dt_NhanVien";
            this.dsData.Tables.Remove(this.dsData.Tables["dt_NhanVien"]);
            this.dsData.Tables.Add(dt);
            dt = _BizThemNhanVien.ft_GetDataLSChucDanhTheoMa(strORG, strDepart, txtMaNhanVien.Text);// lấy dữ liệu theo mã
            dt.TableName = "dt_ChucDanh";
            this.dsData.Tables.Remove(this.dsData.Tables["dt_ChucDanh"]);
            this.dsData.Tables.Add(dt);
            dt = _BizThemNhanVien.ft_GetDataLSChucVuTheoMa(strORG, strDepart, txtMaNhanVien.Text);// lấy dữ liệu theo mã
            dt.TableName = "dt_ChucVu";
            this.dsData.Tables.Remove(this.dsData.Tables["dt_ChucVu"]);
            this.dsData.Tables.Add(dt);
            dt = _BizThemNhanVien.ft_GetDataLSNganHangTheoMa(strORG, strDepart, txtMaNhanVien.Text);// lấy dữ liệu theo mã
            dt.TableName = "dt_NganHang";
            this.dsData.Tables.Remove(this.dsData.Tables["dt_NganHang"]);
            this.dsData.Tables.Add(dt);
            dt = _BizThemNhanVien.ft_GetDataTrangBiCaNhanTheoMa(strORG, strDepart, txtMaNhanVien.Text);// lấy dữ liệu theo mã
            dt.TableName = "dt_TrangBi";
            this.dsData.Tables.Remove(this.dsData.Tables["dt_TrangBi"]);
            this.dsData.Tables.Add(dt);
            dt = _BizThemNhanVien.ft_GetDataThanNhanTheoMa(strORG, strDepart, txtMaNhanVien.Text);// lấy dữ liệu theo mã
            dt.TableName = "dt_GiaDinh";
            this.dsData.Tables.Remove(this.dsData.Tables["dt_GiaDinh"]);
            this.dsData.Tables.Add(dt);
            drHeader = dsData.Tables["dt_NhanVien"].Rows[0];
            UtilityUIElement.ElementToControl(drHeader,"Header", this.LayoutRoot.Children);
            gChucDanh.DataContext = dsData.Tables["dt_ChucDanh"].AsDataView();
            gChucVu.DataContext = dsData.Tables["dt_ChucVu"].AsDataView();
            gNganHang.DataContext = dsData.Tables["dt_NganHang"].AsDataView();
            gTrangBi.DataContext = dsData.Tables["dt_TrangBi"].AsDataView();
            gGiaDinh.DataContext = dsData.Tables["dt_GiaDinh"].AsDataView();
        }
        /// <summary>
        /// User: TAMNN; 20/08/2014
        /// xóa toàn bộ dữ liệu trên các controll
        /// </summary>
        private void ResetTemp()
        {
            UtilityUIElement.BlankControlText(this.LayoutRoot.Children);
        }
        /// <summary>
        /// User: TAMNN; 20/08/2014
        /// kiểm tra các cột bắt buộc và các cột tính toán đúng hay sai.
        /// </summary>
        /// <returns></returns>
        private void CheckDataBeforeSave(ref string Message, ref bool p_bResult)
        {
            if (string.IsNullOrEmpty(txtHo.Text))
            {
                Message += "Nhập Họ" + "\n";
            }
            if (string.IsNullOrEmpty(txtTen.Text))
            {
                Message += "Nhập Tên" + "\n";
            }
            if (string.IsNullOrEmpty(dptNgaySinh.Text))
            {
                Message += "Nhập Ngày sinh" + "\n";
            }
            dynamic idselected = cboGioiTinh.SelectedItem;
            if (idselected == null || string.IsNullOrEmpty((string)idselected.Id))
            {
                Message += "Chọn Giới tính" + "\n";
            }
            idselected = cboNoiSinh.SelectedItem;
            if (idselected == null || string.IsNullOrEmpty((string)idselected.Id))
            {
                Message += "Chọn Nơi sinh" + "\n";
            }
            idselected = cboMaDanToc.SelectedItem;
            if (idselected == null || string.IsNullOrEmpty((string)idselected.Id))
            {
                Message += "Chọn Dân tộc" + "\n";
            }
            if (string.IsNullOrEmpty(cboMaQuocTich.aaCode))
            {
                Message += "Chọn Quốc tịch" + "\n";
            }
            if (string.IsNullOrEmpty(txtSoCMND.Text))
            {
                Message += "Nhập Số CMND" + "\n";
            }
            foreach (DataRow row in this.dsData.Tables["dt_ChucDanh"].Rows)
            {
                int count = 0;
                string msgitem = string.Empty;
                if (string.IsNullOrEmpty(row["MaChucDanh"].ToString()))
                {
                    msgitem += "Nhập mã chức danh" + " \n";
                    count++;
                }
                if (!string.IsNullOrEmpty(row["MaChucDanh"].ToString()) && string.IsNullOrEmpty(row["TenChucDanh"].ToString()))
                {
                    msgitem += "Nhập mã chức danh chưa đúng" + " \n";
                }
                if (string.IsNullOrEmpty(row["TuNgayHienThi"].ToString()))
                {
                    msgitem += "Nhập Từ ngày" + " \n";
                    count++;
                }
                if (string.IsNullOrEmpty(row["DenNgayHienThi"].ToString()))
                {
                    msgitem += "Nhập Đến ngày" + " \n";
                    count++;
                }
                if (count == 3)
                    row.AcceptChanges();
                else if(!string.IsNullOrEmpty(msgitem))
                {
                    Message += msgitem;
                    break;
                }
            }
            foreach (DataRow row in this.dsData.Tables["dt_ChucVu"].Rows)
            {
                int count = 0;
                string msgitem = string.Empty;
                if (string.IsNullOrEmpty(row["MaChucVu"].ToString()))
                {
                    msgitem += "Nhập mã chức vụ" + " \n";
                    count++;
                }
                if (!string.IsNullOrEmpty(row["MaChucVu"].ToString()) && string.IsNullOrEmpty(row["TenChucVu"].ToString()))
                {
                    msgitem += "Nhập mã chức vụ chưa đúng" + " \n";
                }
                if (string.IsNullOrEmpty(row["TuNgayHienThi"].ToString()))
                {
                    msgitem += "Nhập Từ ngày" + " \n";
                    count++;
                }
                if (string.IsNullOrEmpty(row["DenNgayHienThi"].ToString()))
                {
                    msgitem += "Nhập Đến ngày" + " \n";
                    count++;
                }
                if (count == 3)
                    row.AcceptChanges();
                else if (!string.IsNullOrEmpty(msgitem))
                {
                    Message += msgitem;
                    break;
                }
            }
            foreach (DataRow row in this.dsData.Tables["dt_NganHang"].Rows)
            {
                int count = 0;
                string msgitem = string.Empty;
                if (string.IsNullOrEmpty(row["SoTaiKhoan"].ToString()))
                {
                    msgitem += "Nhập số tài khoản" + " \n";
                    count++;
                }
                if (string.IsNullOrEmpty(row["MaNganHang"].ToString()))
                {
                    msgitem += "Nhập mã ngân hàng" + " \n";
                    count++;
                }
                if (!string.IsNullOrEmpty(row["MaNganHang"].ToString()) && string.IsNullOrEmpty(row["TenNganHang"].ToString()))
                {
                    msgitem += "Nhập mã ngân hàng chưa đúng" + " \n";
                }
                if (count == 2)
                    row.AcceptChanges();
                else if (!string.IsNullOrEmpty(msgitem))
                {
                    Message += msgitem;
                    break;
                }

            }
            foreach (DataRow row in this.dsData.Tables["dt_TrangBi"].Rows)
            {
                int count = 0;
                string msgitem = string.Empty;
                if (string.IsNullOrEmpty(row["MaThietBi"].ToString()))
                {
                    msgitem += "Nhập số tài khoản" + " \n";
                    count++;
                }
                if (!string.IsNullOrEmpty(row["MaThietBi"].ToString()) && string.IsNullOrEmpty(row["TenThietBi"].ToString()))
                {
                    msgitem += "Nhập mã thiết bị chưa đúng" + " \n";
                }
                if (count == 1)
                    row.AcceptChanges();
                else if (!string.IsNullOrEmpty(msgitem))
                {
                    Message += msgitem;
                    break;
                }
            }
            foreach (DataRow row in this.dsData.Tables["dt_GiaDinh"].Rows)
            {
                int count = 0;
                string msgitem = string.Empty;
                if (!string.IsNullOrEmpty(row["TenTN"].ToString()))
                {
                    msgitem += "Nhập tên thân nhân" + " \n";
                    count++;
                }
                if (!string.IsNullOrEmpty(row["NgaySinhHienThi"].ToString()))
                {
                    msgitem += "Nhập ngày sinh" + " \n";
                    count++;
                }
                if (!string.IsNullOrEmpty(row["NgheNghiep"].ToString()))
                {
                    msgitem += "Nhập nghề nghiệp" + " \n";
                    count++;
                }
                if (!string.IsNullOrEmpty(row["MoiQuanHe"].ToString()))
                {
                    msgitem += "Nhập mối quan hệ" + " \n";
                    count++;
                }
                if (count == 4)
                    row.AcceptChanges();
                else if (!string.IsNullOrEmpty(msgitem))
                {
                    Message += msgitem;
                    break;
                }
            }
            if (isModeHeader == UtilityUIElement.FormMode.NewMode)
                // kiểm tra xem code id đó đã được lưu hay chưa
                p_bResult = _BizThemNhanVien.fb_KiemTraSoCounter(txtMaNhanVien.Text, Counter,"","",DateTime.Now.Year.ToString(),DateTime.Now.Month.ToString());
        }
        /// <summary>
        /// User: TAMNN; 20/08/2014
        /// ẩn hiện controll
        /// </summary>
        /// <param name="isEnable"></param>
        private void EnableControl(bool isEnable)
        {
            UtilityUIElement.Enable_Control(isEnable, this.LayoutRoot.Children);
            txtMaNhanVien.IsEnabled = false;
            txtTenQuanHuyenThuongTru.IsEnabled = false;
            txtTenPhuongXaThuongTru.IsEnabled = false;
            txtTenTinhThuongTru.IsEnabled = false;
            txtTenQuanHuyenTamTru.IsEnabled = false;
            txtTenPhuongXaTamTru.IsEnabled = false;
            txtTenTinhTamTru.IsEnabled = false;
        }
        /// <summary>
        /// User: TAMNN; 20/08/2014
        /// gán các giá trị mặc định cho các controll
        /// </summary>
        private void SetDefaulControl()
        {
            dptNgaySinh.Text = LibraryFormatConverter.SetStringDateDefault;
            dptNgayCap.Text = LibraryFormatConverter.SetStringDateDefault;
            dptNgayVaoLam.Text = LibraryFormatConverter.SetStringDateDefault;
            dptNgayVaoLamCT.Text = LibraryFormatConverter.SetStringDateDefault;
            gChucDanh.DataContext = dsData.Tables["dt_ChucDanh"].AsDataView();
            gChucVu.DataContext = dsData.Tables["dt_ChucVu"].AsDataView();
            gNganHang.DataContext = dsData.Tables["dt_NganHang"].AsDataView();
            gTrangBi.DataContext = dsData.Tables["dt_TrangBi"].AsDataView();
            gGiaDinh.DataContext = dsData.Tables["dt_GiaDinh"].AsDataView();
            // set default controll
            if (dsData.Tables.Contains("dt_Default") && dsData.Tables["dt_Default"].Rows.Count > 0)
            {
                //txtMaBoPhanCha.Text = Utility.GetValueFromDT(dsData.Tables["dt_Default"], "MaBoPhanCha", "TenCot", "GiaTri");
            }
            //chkTyGiaHomTruoc.IsChecked = true;
        }

        #region Hàm dùng cho tìm kiếm form
        private void FunctionShowForm(string p_sStoreName, string p_sParams,string p_sValues)
        {
            var formKeySearch = new frmTimKiem(p_sStoreName,p_sParams, p_sValues);
            formKeySearch.IdentityValue += new frmTimKiem.IdentityValues(Search_Form);
            formKeySearch.Show();
        }
        /// <summary>
        /// User: TAMNN 11/08/2014
        /// Mục đích: lấy dữ liệu trả về của form search
        /// </summary>
        /// <param name="keyReturn"></param>
        private void Search_Form(string keyReturn)
        {
            string str = keyReturn;
            DataRowView drv ;
            switch (controlName)
            {
                case "txtMaPhuongXaThuongTru":
                    txtMaPhuongXaThuongTru.Text = str;
                    txtTenPhuongXaThuongTru.Text = _BizThemNhanVien.ft_GetTenXaPhuongTheoMa(str);// lấy dữ liệu theo mã
                    break;
                case "txtMaPhuongXaTamTru":
                    txtMaPhuongXaTamTru.Text = str;
                    txtTenPhuongXaTamTru.Text = _BizThemNhanVien.ft_GetTenXaPhuongTheoMa(str);// lấy dữ liệu theo mã
                    break;
                case "txtMaQuanHuyenThuongTru":
                    txtMaQuanHuyenThuongTru.Text = str;
                    txtTenQuanHuyenThuongTru.Text = _BizThemNhanVien.ft_GetTenQuanHuyenTheoMa(str);// lấy dữ liệu theo mã
                    break;
                case "txtMaQuanHuyenTamTru":
                    txtMaQuanHuyenTamTru.Text = str;
                    txtTenQuanHuyenTamTru.Text = _BizThemNhanVien.ft_GetTenQuanHuyenTheoMa(str);// lấy dữ liệu theo mã
                    break;
                case "txtMaTinhThuongTru":
                    txtMaTinhThuongTru.Text = str;
                    txtTenTinhThuongTru.Text = _BizThemNhanVien.ft_GetTenTinhTPTheoMa(str);// lấy dữ liệu theo mã
                    break;
                case "txtMaTinhTamTru":
                    txtMaTinhTamTru.Text = str;
                    txtTenTinhTamTru.Text = _BizThemNhanVien.ft_GetTenTinhTPTheoMa(str);// lấy dữ liệu theo mã
                    break;
                case "MaChucDanh":
                    drv = gChucDanh.SelectedValue as DataRowView;
                    drv["MaChucDanh"] = str;
                    DataGridCellInfo currentCell = gChucDanh.CurrentCell;
                    int columnDisplayIndex = currentCell.Column.DisplayIndex;
                    DataGridColumn nextColumn = gChucDanh.ColumnFromDisplayIndex(columnDisplayIndex);
                    gChucDanh.CurrentCell = new DataGridCellInfo(gChucDanh.SelectedItem, nextColumn);
                    gChucDanh.BeginEdit();
                    break;
                case "TenChucDanh":
                    drv = gChucDanh.SelectedValue as DataRowView;
                    drv["MaChucDanh"] = str;
                    drv["TenChucDanh"] = _BizThemNhanVien.ft_GetChucDanhTheoMa(str);
                    currentCell = gChucDanh.CurrentCell;
                    columnDisplayIndex = currentCell.Column.DisplayIndex;
                    nextColumn = gChucDanh.ColumnFromDisplayIndex(columnDisplayIndex);
                    gChucDanh.CurrentCell = new DataGridCellInfo(gChucDanh.SelectedItem, nextColumn);
                    gChucDanh.BeginEdit();
                    break;
                case "MaChucVu":
                    drv = gChucVu.SelectedValue as DataRowView;
                    drv["MaChucVu"] = str;
                    currentCell = gChucVu.CurrentCell;
                    columnDisplayIndex = currentCell.Column.DisplayIndex;
                    nextColumn = gChucVu.ColumnFromDisplayIndex(columnDisplayIndex);
                    gChucVu.CurrentCell = new DataGridCellInfo(gChucVu.SelectedItem, nextColumn);
                    gChucVu.BeginEdit();
                    break;
                case "TenChucVu":
                    drv = gChucVu.SelectedValue as DataRowView;
                    drv["TenChucVu"] = str;
                    drv["TenChucDanh"] = _BizThemNhanVien.ft_GetChucVuTheoMa(str);
                    currentCell = gChucVu.CurrentCell;
                    columnDisplayIndex = currentCell.Column.DisplayIndex;
                    nextColumn = gChucVu.ColumnFromDisplayIndex(columnDisplayIndex);
                    gChucVu.CurrentCell = new DataGridCellInfo(gChucVu.SelectedItem, nextColumn);
                    gChucVu.BeginEdit();
                    break;
                case "MaNganHang":
                    drv = gNganHang.SelectedValue as DataRowView;
                    drv["MaNganHang"] = str;
                    currentCell = gNganHang.CurrentCell;
                    columnDisplayIndex = currentCell.Column.DisplayIndex;
                    nextColumn = gNganHang.ColumnFromDisplayIndex(columnDisplayIndex);
                    gNganHang.CurrentCell = new DataGridCellInfo(gNganHang.SelectedItem, nextColumn);
                    gNganHang.BeginEdit();
                    break;
                case "TenNganHang":
                    drv = gNganHang.SelectedValue as DataRowView;
                    drv["MaNganHang"] = str;
                    drv["TenChucDanh"] = _BizThemNhanVien.ft_GetNganHangTheoMa(str);
                    currentCell = gNganHang.CurrentCell;
                    columnDisplayIndex = currentCell.Column.DisplayIndex;
                    nextColumn = gNganHang.ColumnFromDisplayIndex(columnDisplayIndex);
                    gNganHang.CurrentCell = new DataGridCellInfo(gNganHang.SelectedItem, nextColumn);
                    gNganHang.BeginEdit();
                    break;
                case "MaThietBi":
                    drv = gTrangBi.SelectedValue as DataRowView;
                    drv["MaThietBi"] = str;
                    currentCell = gTrangBi.CurrentCell;
                    columnDisplayIndex = currentCell.Column.DisplayIndex;
                    nextColumn = gTrangBi.ColumnFromDisplayIndex(columnDisplayIndex);
                    gTrangBi.CurrentCell = new DataGridCellInfo(gTrangBi.SelectedItem, nextColumn);
                    gTrangBi.BeginEdit();
                    break;
                case "TenThietBi":
                    drv = gTrangBi.SelectedValue as DataRowView;
                    drv["MaThietBi"] = str;
                    drv["TenThietBi"] = _BizThemNhanVien.ft_GetThietBiTheoMa(str);
                    currentCell = gTrangBi.CurrentCell;
                    columnDisplayIndex = currentCell.Column.DisplayIndex;
                    nextColumn = gTrangBi.ColumnFromDisplayIndex(columnDisplayIndex);
                    gTrangBi.CurrentCell = new DataGridCellInfo(gTrangBi.SelectedItem, nextColumn);
                    gTrangBi.BeginEdit();
                    break;

            }
        }
        #endregion

        private void SetEnable_Button(bool New, bool Edit, bool Del, bool Save)
        {
            this.btnNew.IsEnabled = UtilityUIElement.GetPermission(this.dtPermission, this.btnNew.Name, New);
            this.btnEdit.IsEnabled = UtilityUIElement.GetPermission(this.dtPermission, this.btnEdit.Name, Edit);
            this.btnDelete.IsEnabled = UtilityUIElement.GetPermission(this.dtPermission, this.btnDelete.Name, Del);
            this.btnSave.IsEnabled = UtilityUIElement.GetPermission(this.dtPermission, this.btnSave.Name, Save);
        }
        #endregion

        #region Tính toán
        
        #endregion

        //bool CheckFileType(string fileName)
        //{

        //    string ext = Path.GetExtension(fileName);

        //    switch (ext.ToLower())
        //    {

        //        case ".gif":

        //            return true;

        //        case ".png":

        //            return true;

        //        case ".jpg":

        //            return true;

        //        case ".jpeg":

        //            return true;

        //        default:

        //            return false;

        //    }

        //}
    }
}
